/**
 * User 表的sql语句实现
 */

#ifndef MYSQL_MYSQL_USER_H
#define MYSQL_MYSQL_USER_H

#include "database_factory.h"

#include <memory>
#include <odb/database.hxx>
#include <odb/mysql/database.hxx>
#include <string>
#include <vector>

#include "user.hxx"

namespace chat {
/**
 * @brief User表 操作类
 */
class UserTable {
   public:
    UserTable(const std::shared_ptr<odb::mysql::database>& db) : db_(db) {}
    bool insert(const UserPtr& user);
    bool update(const UserPtr& user);
    UserPtr select_by_nickname(const std::string& nickname);
    UserPtr select_by_user_id(const std::string& user_id);
    UserPtr select_by_phone(const std::string& phone);
    std::vector<User> select_multi_by_ids(
        const std::vector<std::string>& id_list);

   private:
    std::shared_ptr<odb::mysql::database> db_ = nullptr;
};

using UserTablePtr = std::shared_ptr<UserTable>;

}  // namespace chat

#endif  // MYSQL_MYSQL_USER_H